SQL문 기본 문제 - 예제로 개념 다지기(정답 포함)

* SQL문 기본 문제 - 예제로 개념 다지기(정답 포함)

문제에 쓰이는 SQL 파일은 여기서 받아서 사용하자. World라는 이름을 가지고 있는 Database Set이다.

아직 쓰는 SQL 프로그램이 없다면 맥에서는 SequelPro를, Windows에서는 HeidiSQL을 써보자. 물론, WorkBench도 있지만, 문법을 익히는 용도로는 다소 무겁기 때문이다.

난이도 : ★(Very Easy)

사실 실무에서 쓰이는 SQL문은 몇 개 없다지만, 세상엔 언제나 만약에라는 것이 있다. 만약에 금융 관련 직군으로 면접을 보러 간다면? 아래와 같은 기본적인 SQL문을 달달 외우고 있어야 할지도 모른다. 그러기에 기본기를 닦기 좋은 SQL문제와 정답을 업로딩한다. 문법을 뒤적거리면서 푸는데 걸린 시간은 1시간 30분 정도이다.


* Quiz 1

  1. country 테이블에서 중복을 제거한 Continent를 조회하세요.

1

  1. 한국 도시중에 인구가 100만이 넘는 도시를 조회하여 인구순으로 내림차순하세요.

2

  1. city 테이블에서 population이 800만 ~ 1000만 사이인 도시 데이터를 인구수순으로 내림차순하세요.

3

  1. country 테이블에서 1940 ~ 1950년도 사이에 독립한 국가들을 조회하고 독립한 년도 순으로 오름차순하세요.

4

  1. contrylanguage 테이블에서 스페인어, 한국어, 영어를 95% 이상 사용하는 국가 코드를 Percentage로 내림차순하여 아래와 같이 조회하세요.

5

  1. country 테이블에서 Code가 A로 시작하고 GovernmentForm에 Republic이 포함되는 데이터를 아래와 같이 조회하세요.

6


다 풀었는가…?
그렇다면!


* Quiz 2 - group by & having

  1. country 테이블에서 몇개의 대륙이 있는지 조회하세요.

8

  1. country 테이블에서 Continent(대륙)별 몇개의 나라가 있는지 조회하세요.

9

  1. city 테이블에서 국가코드(CountryCode) 별로 총인구가 몇명인지 조회하고 총인구 순으로 내림차순하세요.

10

  1. countrylanguage 테이블에서 언어별 사용하는 국가수를 조회하고 많이 사용하는 언어를 5위에서 10위까지 조회하세요.

11

  1. countrylanguage 테이블에서 언어별 15개 국가 이상에서 사용되는 언어를 조회하고 언어별 국가수에 따라 내림차순하세요.

12

  1. country 테이블에서 대륙별 전체 표면적크기를 구하고 표면적 크기 순으로 내림차순하세요.

13


정말 고생했다!
정답은 아래와 같다.

* SQL문 기본 문제 정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- quiz 1

USE world;
SELECT *

-- 1. country 테이블에서 중복을 제거한 Continent를 조회하세요.
SELECT DISTINCT(Continent)
FROM country

-- 2. 한국 도시중에 인구가 100만이 넘는 도시를 조회하여 인구순으로 내림차순하세요.
SELECT name, population
FROM city
WHERE countrycode = "KOR" AND population >= 1000000
ORDER BY population DESC

-- 3. city 테이블에서 population이 800만 ~ 1000만 사이인 도시 데이터를 인구수순으로 내림차순하세요.
SELECT name, population
FROM city
WHERE population <= 10000000 AND population >= 8000000
ORDER BY population DESC

-- 4. country 테이블에서 1940 ~ 1950년도 사이에 독립한 국가들을 조회하고 독립한 년도 순으로 오름차순하세요.
SELECT code, CONCAT(name, "(", indepyear, ")") AS "Nameindep", continent, population
FROM country
WHERE indepyear >= 1940 AND indepyear <= 1950
ORDER BY indepyear

-- 5. contrylanguage 테이블에서 스페인어, 한국어, 영어를 95% 이상 사용하는 국가 코드를 Percentage로 내림차순하여 아래와 같이 조회하세요.
SELECT countrycode, language, percentage
FROM countrylanguage
WHERE (language = "english" OR language = "spanish" OR language = "korean") AND percentage >= 95
ORDER BY percentage DESC

-- 6. country 테이블에서 Code가 A로 시작하고 GovernmentForm에 Republic이 포함되는 데이터를 아래와 같이 조회하세요.
SELECT code, name, continent, governmentform, population
FROM country
WHERE governmentform LIKE "%Republic%" AND code LIKE "A%"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-- quiz 2 - group by & having

USE world;
SELECT *

-- 1. country 테이블에서 몇개의 대륙이 있는지 조회하세요.
SELECT COUNT(DISTINCT(continent)) AS "count"
FROM country

-- 2. country 테이블에서 Continent(대륙)별 몇개의 나라가 있는지 조회하세요.
SELECT continent, COUNT(continent) AS "count"
FROM country
GROUP BY continent
ORDER BY COUNT DESC

-- 3. city 테이블에서 국가코드(CountryCode) 별로 총인구가 몇명인지 조회하고 총인구 순으로 내림차순하세요.
SELECT countrycode, SUM(population) as "Population"
FROM city
GROUP BY countrycode
ORDER BY population DESC

-- 4. countrylanguage 테이블에서 언어별 사용하는 국가수를 조회하고 많이 사용하는 언어를 5위에서 10위까지 조회하세요.
SELECT language, COUNT(countrycode) as "count"
FROM countrylanguage
GROUP BY language
ORDER BY count DESC
LIMIT 4, 6

-- 5. countrylanguage 테이블에서 언어별 15개 국가 이상에서 사용되는 언어를 조회하고 언어별 국가수에 따라 내림차순하세요.
SELECT language, COUNT(countrycode) as "count"
FROM countrylanguage
GROUP BY language
HAVING count >= 15
ORDER BY count DESC

-- 6. country 테이블에서 대륙별 전체 표면적크기를 구하고 표면적 크기 순으로 내림차순하세요.
SELECT continent, SUM(surfacearea) AS "SurfaceArea"
FROM country
GROUP BY continent
ORDER BY surfacearea DESC

SQL문은 타 문법보다 쉽지만, 명령어를 모두 대문자로 쳐줘야한다는 나름의 룰이 있다.(마치 C 문법의 {} 표현이나 HTML 문법의 <> 과 비슷한데, 똑같이 동작은 한다. 알아보기가 힘들 뿐) 그래서 손가락과 손목에 자꾸 힘이 들어가 터널증후군에 걸리기 쉽지 않을까? 라는 생각을 했다.. -_-